STM8 Timer 2 und Timer 3
Der primäre Zähler des STM8 Timer 2 (bzw. Timer 3) ist ein Aufwärts-Zähler (im Gegensatz zum Timer 1 in den STM8 Prozessoren, der einen Auf-/Abwärts-Zähler besitzt). D.h. der Zähler started üblicherweise beim Wert „0“ und zählt vorwärts 1, 2, 3..... .
Der 16-Bit Zähler kann per Software gelesen und geschrieben werden. Die geschieht allerdings in zwei Schritten einmal für das TIMn_CNTRH „High“-Byte und dann für das TIMn_CNTRL „Low“-Byte.
Achtung:
Beim Lesen des Zählers durch zwei aufeinander folgende Zugriffe muß zuerst der TIMn_CNTRH (also das höherwertige Byte) gelesen werden. Bei diesem Zugriff wird das niedrigwertigere Byte TIMn_CNTRL in einem 8 Bit Register mit dem ersten Zugriff zwischengespeichert um den 16 Bit Wert des Zähler sozusagen „einzufrieren“ und einen zwischenzeitlichen Überlauf zwischen Low-Byte und High-Byte zu vermeiden. Die Benutzung eines LDW-Befehls (Load Word) ist zu vermeiden da die Lesesequenz des LDW erst das Low-Byte und danach das High-Byte einliest!
| TIMn_CNTRH Register - Counter High (T2 = 0x00.530Ah, T3 = 0x00.532Ah im STM8S | |||||||||
| Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
| TIMn_CNTRH | CNTR[15] | CNTR[14] | CNTR[13] | CNTR[12] | CNTR[11] | CNTR[10] | CNTR[9] | CNTR[8] | |
| TIMn_CNTRL Register - Counter Low (T2 = 0x00.530Bh, T3 = 0x00.532Bh im STM8S ) | |||||||||
| Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
| TIMn_CNTRL | CNTR[7] | CNTR[6] | CNTR[5] | CNTR[4] | CNTR[3] | CNTR[2] | CNTR[1] | CNTR[0] | |
Im „Up-Counting“ Mode zählt der Zähler bis zu dem Wert, der dem Inhalt des TIMn_ARR Registers entspricht und wird nach dem nächsten Takt auf „0“ zurückgesetzt. Der Reset des Zähler generiert einen Zähler-Überlauf (Overflow) und falls das UDIS-Bit im TIMn_CR1 Register zurückgesetzt ist („0“) auch einen „Update-Event“.
In dieser einfachen Kombination kann, durch das Setzen des Vorteilers sowie des Auto-Reload Registers, eine einfache Zeitbasis programmiert werden, die durch das Auslösen eines Interrupts bei einem Überlauf des Zählers einen Systemtakt für die Software (bzw. für einen Betriebssystem-Kern) erzeugt.
Allerdings wird der Zähler nur aktiviert wenn das CEN-Bit im TIMn_CR1 Register wie nachfolgend erklärt, gesetzt („1“) wird.
Copyright Notiz
Dieses Dokument sowie dessen Inhalt, insbesondere Texte, Fotografien und Grafiken, unterliegt dem Copyright (© 2017) und sind nur mit einer schriftlicher Zustimmung des Autors, Dipl.Ing.(FH) Franz Henkel zur vollständigen oder auszugsweisen Weiterverwendung in Form einer gedruckten oder elektronischen Kopie oder Replikation bzw. einer vollständigen oder auszugsweisen Bereitstellung des Inhalts in schriftlicher oder elektronischer Form, zu verwenden.